// Copyright (C) 2010 von Karman Institute for Fluid Dynamics, Belgium
//
// This software is distributed under the terms of the
// GNU Lesser General Public License version 3 (LGPLv3).
// See doc/lgpl.txt and doc/gpl.txt for the license text.

#ifndef cf3_Math_LSS_BelosGMRESParameters_hpp
#define cf3_Math_LSS_BelosGMRESParameters_hpp

////////////////////////////////////////////////////////////////////////////////////////////

#include "common/Component.hpp"

#include "math/LSS/LibLSS.hpp"
#include "ParameterListDefaults.hpp"

////////////////////////////////////////////////////////////////////////////////////////////

/**
 *  @file BelosGMRESParameters.hpp Set defaults for a Belos GMRES solve
 *  @author Bart Janssens
 **/
////////////////////////////////////////////////////////////////////////////////////////////

namespace Teuchos { class ParameterList; }

namespace cf3 {
namespace math {
namespace LSS {

////////////////////////////////////////////////////////////////////////////////////////////

/// Encapsulate a Teuchos parameter list
class LSS_API BelosGMRESParameters : public ParameterListDefaults
{
public:

  /// Default constructor
  BelosGMRESParameters(const std::string& name);

  /// name of the type
  static std::string type_name () { return "BelosGMRESParameters"; }

  /// Set the values of the passed parameterlist to the defualt values that are generated by the concrete implementation
  void set_parameters(Teuchos::ParameterList& parameters) const;

}; // end of class BelosGMRESParameters

////////////////////////////////////////////////////////////////////////////////////////////

} // namespace LSS
} // namespace math
} // namespace cf3

#endif // cf3_Math_LSS_BelosGMRESParameters_hpp
